home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / comm / tcp / Amster.lha / Amster_Install / Source / gui.c < prev    next >
C/C++ Source or Header  |  2000-07-31  |  24KB  |  685 lines

  1. /*
  2. ** GUI Functions
  3. */
  4.  
  5. #include "include/config.h"
  6.  
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <stdarg.h>
  10. #include <string.h>
  11.  
  12. #include <exec/memory.h>
  13.  
  14. #include <proto/asl.h>
  15. #include <proto/dos.h>
  16. #include <proto/icon.h>
  17. #include <proto/utility.h>
  18.  
  19. #include <libraries/gadtools.h>
  20. #include <libraries/asl.h>
  21.  
  22. #include "include/mui.h"
  23. #include <MUI/Lamp_mcc.h>
  24. #include <MUI/NListview_mcc.h>
  25.  
  26. #include "include/gui.h"
  27. #include "include/protos.h"
  28. #include "include/channellist.h"
  29. #include "include/napster.h"
  30. #include "include/transfer.h"
  31. #include "include/download.h"
  32. #include "include/upload.h"
  33. #include "include/prefs.h"
  34. #include "include/hotlist.h"
  35. #include "include/info.h"
  36. #include "include/msg.h"
  37. #include "include/navigator.h"
  38. #include "include/rexx.h"
  39. #include "include/search.h"
  40. #include "include/resultview.h"
  41. #include "include/share.h"
  42. #include "include/panel.h"
  43. #include "include/chat.h"
  44. #include "include/about.h"
  45. #include "include/thread.h"
  46. #include "include/url.h"
  47. #include "amster_Cat.h"
  48.  
  49. struct Library *MUIMasterBase=0;
  50. struct Library *NListBase=0;
  51. struct Library *LampBase=0;
  52. struct Library *TWFBase=0;
  53. int UseLamps = 0;
  54. int UseTWF = 0;
  55. struct guidata mygui;
  56. struct guidata *gui = &mygui;
  57. enum OnlineState gui_onlinestate = OFFLINE;
  58.  
  59. void gui_free(void);
  60. int gui_setup(void);
  61. MUIF gui_handle(REG(a0) struct Hook *h,REG(a2) Object *app, REG(a1) u_long *id);
  62. void gui_about(void);
  63. void gui_appicon(int t);
  64.  
  65. struct Hook handleHook = {{0, 0}, &gui_handle, NULL, NULL};
  66.  
  67.  
  68. void gui_run(unsigned long tcpsig)
  69. {
  70.     ULONG sigs=0;
  71.  
  72.     memset(gui,0,sizeof(struct guidata));
  73.     if (gui_setup()) {
  74.         prf_event(PRFE_STARTUP);
  75.         DoMethod(gui->shwin, SHARE_LOAD);
  76.         while (1) {
  77.             while (DoMethod(gui->app, MUIM_Application_NewInput, &sigs) != MUIV_Application_ReturnID_Quit) {
  78.                 if (sigs) {
  79.                     sigs = Wait(sigs | SIGBREAKF_CTRL_C | tcpsig | th_sigmask);
  80.                     if (sigs & SIGBREAKF_CTRL_C) break;
  81.                     if (sigs & tcpsig) nap_listen();
  82.                     if (sigs & th_sigmask) th_poll();
  83.                 }
  84.             }
  85.             if (!dl_count && !ul_count) break;
  86.             if ((dl_count || ul_count) && MUI_Request(gui->app, gui->win, 0L,
  87.                                        (char *)MSG_REALLYQUIT_TITLE,
  88.                                        (char *)MSG_REALLYQUIT_GAD,
  89.                                        (char *)MSG_REALLYQUIT)) break;
  90.         }
  91.         prf_event(PRFE_EXIT);
  92.         if (prf->autosave && sharechanged) DoMethod(gui->shwin, SHARE_SAVE);
  93.         if (prf->ServerList > 0 && ServerListChanged) DoMethod(gui->WI_Navigator, NAVI_SAVE);
  94.         if (HotlistChanged) DoMethod(gui->WI_Hotlist, HOTLIST_SAVE);
  95.         if (gui_onlinestate > OFFLINE) nap_logout();
  96.     }
  97.     gui_free();
  98. }
  99.  
  100.  
  101. void gui_free(void)
  102. {
  103.     gui_appicon(-1);
  104.     if (gui->app) MUI_DisposeObject(gui->app);
  105.     lamp_dispose();
  106.     if (gui->url_mcc) MUI_DeleteCustomClass(gui->url_mcc);
  107.     if (gui->msg_mcc) MUI_DeleteCustomClass(gui->msg_mcc);
  108.     if (gui->info_mcc) MUI_DeleteCustomClass(gui->info_mcc);
  109.     if (gui->about_mcc) MUI_DeleteCustomClass(gui->about_mcc);
  110.     if (gui->prf_mcc) MUI_DeleteCustomClass(gui->prf_mcc);
  111.     if (gui->dl_mcc) MUI_DeleteCustomClass(gui->dl_mcc);
  112.     if (gui->ul_mcc) MUI_DeleteCustomClass(gui->ul_mcc);
  113.     if (gui->share_mcc) MUI_DeleteCustomClass(gui->share_mcc);
  114.     if (gui->search_mcc) MUI_DeleteCustomClass(gui->search_mcc);
  115.     if (gui->resultview_mcc) MUI_DeleteCustomClass(gui->resultview_mcc);
  116.     if (gui->panel_mcc) MUI_DeleteCustomClass(gui->panel_mcc);
  117.     if (gui->chat_mcc) MUI_DeleteCustomClass(gui->chat_mcc);
  118.     if (gui->navi_mcc) MUI_DeleteCustomClass(gui->navi_mcc);
  119.     if (gui->hotlist_mcc) MUI_DeleteCustomClass(gui->hotlist_mcc);
  120.     if (gui->channellist_mcc) MUI_DeleteCustomClass(gui->channellist_mcc);
  121.     if (MUIMasterBase) CloseLibrary(MUIMasterBase);
  122. }
  123.  
  124.  
  125. int gui_setup(void)
  126. {
  127.     long winopen;
  128.     u_long *MI_Navigator, *MI_Connect, *MI_ConnectTo, *MI_Reconnect, *MI_Disconnect;
  129.     u_long *aboutmenu, *muimenu, *helpmenu, *hidemenu, *quitmenu;
  130.     u_long *openmenu, *savemenu, *saveasmenu;
  131.     u_long *debugmenu, *dlmenu, *ulmenu, *sharemenu, *usermenu, *chatmenu, *MI_Hotlist;
  132.     u_long *muiprfmenu, *prfmenu, *MI_LastSaved, *saveprfmenu;
  133.     u_long *rxexemenu;
  134.  
  135.     localize_array(nap_linktype);
  136.  
  137.     MUIMasterBase = OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN);
  138.     if (!MUIMasterBase) {
  139.         printf(MSG_NO_LIBRARY, MUIMASTER_NAME, MUIMASTER_VMIN);
  140.         return(0);
  141.     }
  142.  
  143.     NListBase = OpenLibrary("MUI/NList.mcc", 19);
  144.     if (!NListBase) {
  145.         printf(MSG_NO_LIBRARY, "NList.mcc", 19);
  146.         return(0);
  147.     }
  148.     if (NListBase->lib_Version == 19 && NListBase->lib_Revision < 97) {
  149.         printf(MSG_NO_LIBRARY, "NList.mcc", 19);
  150.         CloseLibrary(NListBase);
  151.         return(0);
  152.     }
  153.     CloseLibrary(NListBase);
  154.  
  155.     LampBase = OpenLibrary("MUI/Lamp.mcc", 11);
  156.     if (LampBase) {
  157.         if (!(LampBase->lib_Version == 11 && LampBase->lib_Revision == 0))
  158.             UseLamps = 1;
  159.         CloseLibrary(LampBase);
  160.     }
  161.     TWFBase = OpenLibrary("MUI/TWFmultiLED.mcc", 12);
  162.     if (TWFBase) {
  163.         if (!(TWFBase->lib_Version == 12 && TWFBase->lib_Revision < 6))
  164.             UseTWF = 1;
  165.         CloseLibrary(TWFBase);
  166.     }
  167.  
  168.     if (!prf_load("ENV:"AMSTER_PREFS)) prf_load("ENVARC:"AMSTER_PREFS);
  169.  
  170.     lamp_create();
  171.  
  172.     gui->url_mcc = MUI_CreateCustomClass(NULL,MUIC_Text,NULL,sizeof(struct urldata),url_dispatch);
  173.     if (!gui->url_mcc) return(0);
  174.  
  175.     gui->panel_mcc = MUI_CreateCustomClass(NULL,MUIC_Group,NULL,sizeof(struct paneldata),panel_dispatch);
  176.     if (!gui->panel_mcc) return(0);
  177.  
  178.     gui->search_mcc = MUI_CreateCustomClass(NULL,MUIC_Group,NULL,sizeof(struct searchdata),search_dispatch);
  179.     if (!gui->search_mcc) return(0);
  180.  
  181.     gui->resultview_mcc = MUI_CreateCustomClass(NULL,MUIC_Group,NULL,sizeof(struct resultdata),resultview_dispatch);
  182.     if (!gui->resultview_mcc) return(0);
  183.  
  184.     gui->dl_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct TransferData),dl_dispatch);
  185.     if (!gui->dl_mcc) return(0);
  186.  
  187.     gui->ul_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct TransferData),ul_dispatch);
  188.     if (!gui->ul_mcc) return(0);
  189.  
  190.     gui->share_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct shdata),share_dispatch);
  191.     if (!gui->share_mcc) return(0);
  192.  
  193.     gui->prf_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct prfdata),prf_dispatch);
  194.     if (!gui->prf_mcc) return(0);
  195.  
  196.     gui->info_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct infodata),info_dispatch);
  197.     if (!gui->info_mcc) return(0);
  198.  
  199.     gui->about_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct aboutdata),about_dispatch);
  200.     if (!gui->about_mcc) return(0);
  201.  
  202.     gui->msg_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct msgdata),msg_dispatch);
  203.     if (!gui->msg_mcc) return(0);
  204.  
  205.     gui->chat_mcc = MUI_CreateCustomClass(NULL,MUIC_Window,NULL,sizeof(struct chatdata),chat_dispatch);
  206.     if (!gui->chat_mcc) return(0);
  207.  
  208.     gui->navi_mcc = MUI_CreateCustomClass(NULL, MUIC_Window, NULL, sizeof(struct NavigatorData), NavigatorDispatch);
  209.     if (!gui->navi_mcc) return(0);
  210.  
  211.     gui->hotlist_mcc = MUI_CreateCustomClass(NULL, MUIC_Window, NULL, sizeof(struct HotlistData), HotlistDispatch);
  212.     if (!gui->hotlist_mcc) return(0);
  213.  
  214.     gui->channellist_mcc = MUI_CreateCustomClass(NULL, MUIC_Window, NULL, sizeof(struct ChannelListData), ChannelListDispatch);
  215.     if (!gui->channellist_mcc) return(0);
  216.  
  217.     gui->iconpanel = NewObject(gui->panel_mcc->mcc_Class, NULL, TAG_DONE);
  218.     gui->rect = NULL;
  219.  
  220.     gui->app = ApplicationObject,
  221.         MUIA_Application_Title,       "Amster",
  222.         MUIA_Application_Version,     "$VER: Amster "AMSTER_VERSION" ("AMSTER_DATE")",
  223.         MUIA_Application_Author,      "Jacob Laursen",
  224.         MUIA_Application_Description, MSG_CX_DESCRIPTION,
  225.         MUIA_Application_Base,        "AMSTER",
  226.         MUIA_Application_Commands,    &rexx_cmds,
  227.         MUIA_Application_HelpFile,    AMSTER_HELP,
  228.         MUIA_Application_Menustrip,   MenustripObject,
  229.             Child, MenuObject,
  230.                 MUIA_Menu_Title, MSG_AMSTER_MENU,
  231.                 Child, MI_Navigator = makemenu(MSG_AMSTER_NAVIGATOR),
  232.                 Child, makemenu(NULL),
  233.                 Child, MI_Connect = makemenu(MSG_AMSTER_CONNECT),
  234.                 Child, MI_ConnectTo = makemenu(MSG_AMSTER_CONNECTTO),
  235.                 Child, MI_Reconnect = makemenu(MSG_AMSTER_RECONNECT),
  236.                 Child, MI_Disconnect = makemenu(MSG_AMSTER_DISCONNECT),
  237.                 Child, makemenu(NULL),
  238.                 Child, aboutmenu = makemenu(MSG_AMSTER_ABOUT),
  239.                 Child, muimenu = makemenu(MSG_AMSTER_ABOUTMUI),
  240.                 Child, helpmenu = makemenu(MSG_AMSTER_HELP),
  241.                 Child, makemenu(NULL),
  242.                 Child, hidemenu = makemenu(MSG_AMSTER_HIDE),
  243.                 Child, quitmenu = makemenu(MSG_AMSTER_QUIT),
  244.             End,
  245.             Child, MenuObject,
  246.                 MUIA_Menu_Title, MSG_PROJECT_MENU,
  247.                 Child, openmenu = makemenu(MSG_PROJECT_OPEN),
  248.                 Child, savemenu = makemenu(MSG_PROJECT_SAVE),
  249.                 Child, saveasmenu = makemenu(MSG_PROJECT_SAVEAS),
  250.             End,
  251.             Child, MenuObject,
  252.                 MUIA_Menu_Title, MSG_WINDOWS_MENU,
  253.                 Child, debugmenu = makemenu(MSG_WINDOWS_DEBUG),
  254.                 Child, sharemenu = makemenu(MSG_WINDOWS_SHARE),
  255.                 Child, dlmenu = makemenu(MSG_WINDOWS_DOWNLOAD),
  256.                 Child, ulmenu = makemenu(MSG_WINDOWS_UPLOAD),
  257.                 Child, usermenu = makemenu(MSG_WINDOWS_USER),
  258.                 Child, chatmenu = makemenu(MSG_WINDOWS_CHAT),
  259.                 Child, MI_Hotlist = makemenu(MSG_WINDOWS_HOTLIST),
  260.             End,
  261.             Child, MenuObject,
  262.                 MUIA_Menu_Title, MSG_SETTINGS_MENU,
  263.                 Child, gui->iconpanelmenu = maketmenu(MSG_SETTINGS_ICONPANEL),
  264.                 Child, makemenu(NULL),
  265.                 Child, muiprfmenu = makemenu(MSG_SETTINGS_MUI),
  266.                 Child, prfmenu = makemenu(MSG_SETTINGS_CONFIG),
  267.                 Child, makemenu(NULL),
  268.                 Child, MI_LastSaved = makemenu(MSG_SETTINGS_LASTSAVED),
  269.                 Child, saveprfmenu = makemenu(MSG_SETTINGS_SAVE),
  270.             End,
  271.             Child, MenuObject,
  272.                 MUIA_Menu_Title, MSG_AREXX_MENU,
  273.                 Child, rxexemenu = makemenu(MSG_AREXX_EXECUTE),
  274.             End,
  275.         End,
  276.  
  277.         SubWindow, gui->win = WindowObject,
  278.         MUIA_Window_ID, MAKE_ID('M','A','I','N'),
  279.         MUIA_Window_Title, "Amster v"AMSTER_VERSION,
  280.         WindowContents, gui->maingrp = HGroup,
  281.             Child, VGroup,
  282.                 Child, gui->searchpanel = NewObject(gui->search_mcc->mcc_Class,NULL,TAG_DONE),
  283.                 Child, RectangleObject,
  284.                     MUIA_FixHeight, 8,
  285.                     MUIA_Rectangle_HBar, TRUE,
  286.                 End,
  287.                 Child, gui->statgrp = HGroup,
  288.                     Child, gui->stat = TextObject,
  289.                         TextFrame,
  290.                         MUIA_Background, MUII_TextBack,
  291.                         MUIA_Text_PreParse, "\33c",
  292.                     End,
  293.                 End,
  294.                 Child, HGroup,
  295.                     Child, gui->inbut  = SimpleButton(MSG_CONNECT_GAD),
  296.                     Child, gui->outbut = SimpleButton(MSG_DISCONNECT_GAD),
  297.                     Child, gui->rebut  = SimpleButton(MSG_RECONNECT_GAD),
  298.                 End,
  299.             End,
  300. /*
  301.             Child, gui->rect = HGroup,
  302.                 Child, RectangleObject,
  303.                     MUIA_FixWidth, 4,
  304.                     MUIA_Rectangle_VBar, TRUE,
  305.                 End,
  306.                 Child, gui->iconpanel = NewObject(gui->panel_mcc->mcc_Class, NULL, TAG_DONE),
  307.             End,
  308. */
  309.         End,
  310.         End,
  311.  
  312.         SubWindow, gui->WI_ConnectTo = WindowObject,
  313.         MUIA_HelpNode, "connectto",
  314.         MUIA_Window_Title, MSG_CONNECTTO_TITLE,
  315.         MUIA_Window_ID, MAKE_ID('C','O','N','N'),
  316.         WindowContents, VGroup,
  317.             Child, HGroup,
  318.                 Child, ColGroup(2),
  319.                     Child, Label2(MSG_CONNECTTO_SERVER),
  320.                     Child, gui->ST_ConnectServer = StringObject,
  321.                         StringFrame,
  322.                         MUIA_String_AdvanceOnCR, TRUE,
  323.                         MUIA_CycleChain, 1,
  324.                     End,
  325.                     Child, Label2(MSG_CONNECTTO_USERNAME),
  326.                     Child, gui->ST_ConnectUser = StringObject,
  327.                         StringFrame,
  328.                         MUIA_String_Reject, ":%$ ",
  329.                         MUIA_String_AdvanceOnCR, TRUE,
  330.                         MUIA_CycleChain, 1,
  331.                     End,
  332.                     Child, Label2(MSG_CONNECTTO_PASSWORD),
  333.                     Child, gui->ST_ConnectPw = StringObject,
  334.                         StringFrame,
  335.                         MUIA_String_Reject, " ",
  336.                         MUIA_String_AdvanceOnCR, TRUE,
  337.                         MUIA_String_Secret, TRUE,
  338.                         MUIA_CycleChain, 1,
  339.                     End,
  340.                 End,
  341.             End,
  342.             Child, maketoggle(MSG_CONNECTTO_REG, &gui->TG_ConnectReg),
  343.             Child, gui->BT_ConnectServer = SimpleButton(MSG_CONNECTTO_CONNECT_GAD),
  344.         End,
  345.         End,
  346.  
  347.         SubWindow, gui->awin = NewObject(gui->about_mcc->mcc_Class, NULL, TAG_DONE),
  348.         SubWindow, gui->swin = NewObject(gui->prf_mcc->mcc_Class, NULL, TAG_DONE),
  349.         SubWindow, gui->iwin = NewObject(gui->info_mcc->mcc_Class, NULL, TAG_DONE),
  350.         SubWindow, gui->dwin = NewObject(gui->dl_mcc->mcc_Class, NULL, TAG_DONE),
  351.         SubWindow, gui->uwin = NewObject(gui->ul_mcc->mcc_Class, NULL, TAG_DONE),
  352.         SubWindow, gui->shwin = NewObject(gui->share_mcc->mcc_Class, NULL, TAG_DONE),
  353.         SubWindow, gui->mwin = NewObject(gui->msg_mcc->mcc_Class, NULL, TAG_DONE),
  354.         SubWindow, gui->WI_Navigator = NewObject(gui->navi_mcc->mcc_Class, NULL, TAG_DONE),
  355.         SubWindow, gui->WI_Hotlist = NewObject(gui->hotlist_mcc->mcc_Class, NULL, TAG_DONE),
  356.         SubWindow, gui->WI_ChannelList = NewObject(gui->channellist_mcc->mcc_Class, NULL, TAG_DONE),
  357.  
  358.     End;
  359.  
  360.     if (!gui->app) {
  361.         printf(MSG_APP_ERROR);
  362.         return(0);
  363.     }
  364.  
  365.     DoMethod(gui->inbut,MUIM_Notify,MUIA_Pressed,FALSE,gui->app,3,MUIM_CallHook,&handleHook, CONNECT);
  366.     DoMethod(gui->outbut,MUIM_Notify,MUIA_Pressed,FALSE,gui->app,3,MUIM_CallHook,&handleHook, DISCONNECT);
  367.     DoMethod(gui->rebut,MUIM_Notify,MUIA_Pressed,FALSE,gui->app,3,MUIM_CallHook,&handleHook, RECONNECT);
  368.  
  369.     DoMethod(gui->iconpanelmenu, MUIM_Notify, MUIA_Menuitem_Checked, MUIV_EveryTime, gui->app, 3, MUIM_CallHook, &handleHook, UPDATEPANEL);
  370.  
  371.     DoMethod(MI_Navigator, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->WI_Navigator, 3, MUIM_Set, MUIA_Window_Open, TRUE);
  372.     DoMethod(MI_Connect, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->app, 3, MUIM_CallHook, &handleHook, CONNECT);
  373.     DoMethod(MI_ConnectTo, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->WI_ConnectTo, 3, MUIM_Set, MUIA_Window_Open, TRUE);
  374.     DoMethod(MI_Reconnect, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->app, 3, MUIM_CallHook, &handleHook, RECONNECT);
  375.     DoMethod(MI_Disconnect, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->app, 3, MUIM_CallHook, &handleHook, DISCONNECT);
  376.     DoMethod(gui->WI_ConnectTo, MUIM_Notify, MUIA_Window_CloseRequest, TRUE, gui->WI_ConnectTo, 3, MUIM_Set, MUIA_Window_Open, FALSE);
  377.  
  378.     /* Connect to... */
  379.  
  380.     DoMethod(gui->BT_ConnectServer, MUIM_Notify, MUIA_Pressed, FALSE, gui->app, 3, MUIM_CallHook, &handleHook, CONNECTSERVER);
  381.  
  382.     /* Pulldown menu */
  383.  
  384.     DoMethod(aboutmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->awin,3,MUIM_Set,MUIA_Window_Open,TRUE);
  385.     DoMethod(muimenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->app,2,MUIM_Application_AboutMUI,gui->win);
  386.     DoMethod(helpmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->app,5,MUIM_Application_ShowHelp,gui->win,AMSTER_HELP,0,0);
  387.     DoMethod(hidemenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->app,3,MUIM_Set,MUIA_Application_Iconified,TRUE);
  388.     DoMethod(quitmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  389.  
  390.     DoMethod(openmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->shwin,1,SHARE_LOADAS);
  391.     DoMethod(savemenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->shwin,1,SHARE_SAVE);
  392.     DoMethod(saveasmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->shwin,1,SHARE_SAVEAS);
  393.  
  394.     DoMethod(debugmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->iconpanel,1,PANEL_OPENDEBUG);
  395.     DoMethod(dlmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->iconpanel,1,PANEL_OPENDL);
  396.     DoMethod(ulmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->uwin,1,UPLOAD_OPEN);
  397.     DoMethod(sharemenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->iconpanel,1,PANEL_OPENSHARE);
  398.     DoMethod(usermenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->iconpanel,1,PANEL_OPENMSG);
  399.     DoMethod(chatmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->iconpanel,1,PANEL_NEWCHAT);
  400.     DoMethod(MI_Hotlist, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->WI_Hotlist, 3, MUIM_Set, MUIA_Window_Open, TRUE);
  401.  
  402.     DoMethod(muiprfmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->app,2,MUIM_Application_OpenConfigWindow,0);
  403.     DoMethod(prfmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->iconpanel,1,PANEL_OPENPRF);
  404.     DoMethod(MI_LastSaved, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime, gui->swin, 1, PRF_LASTSAVED);
  405.     DoMethod(saveprfmenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->swin,1,PRF_SAVEALL);
  406.  
  407.     DoMethod(rxexemenu,MUIM_Notify,MUIA_Menuitem_Trigger,MUIV_EveryTime,gui->app,3,MUIM_CallHook,&handleHook, EXECUTEAREXX);
  408.  
  409.     DoMethod(gui->win,MUIM_Notify,MUIA_Window_CloseRequest,TRUE,gui->app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit);
  410.     DoMethod(gui->app, MUIM_Notify, MUIA_Application_Iconified, FALSE, gui->app,3, MUIM_CallHook, &handleHook, DEICONIFIED);
  411.  
  412.     if (UseLamps) DoMethod(gui->statgrp, OM_ADDMEMBER, gui->lamp = LampObject, MUIA_Lamp_Type, MUIV_Lamp_Type_Huge, MUIA_Lamp_Color, MUIV_Lamp_Color_Off, End);
  413.  
  414.     DoMethod(gui->searchpanel, SEARCH_SET);
  415.  
  416.     set(gui->ST_ConnectUser, MUIA_String_Contents, prf->user);
  417.     set(gui->ST_ConnectPw,   MUIA_String_Contents, prf->pass);
  418.     set(gui->TG_ConnectReg,  MUIA_Selected,        TRUE);
  419.  
  420.     if (prf->noiconpanel) {
  421.         set(gui->iconpanelmenu, MUIA_Menuitem_Checked, FALSE);
  422. /*        set(gui->rect, MUIA_ShowMe, FALSE);*/
  423.     }
  424.     else {
  425.         set(gui->iconpanelmenu, MUIA_Menuitem_Checked, TRUE);
  426.     }
  427.  
  428.     gui_appicon(0);
  429.     gui_state(OFFLINE);
  430.  
  431.     if (!UseLamps) gui_debug((char *)MSG_INFO_NOLAMPS);
  432.  
  433.     /* Set screen title for all windows */
  434.     DoMethod(gui->app, MUIM_MultiSet, MUIA_Window_ScreenTitle,
  435.         "Amster "AMSTER_VERSION" ("AMSTER_DATE") © 1999-2000 Gürer Özen & Jacob Laursen",
  436.         gui->win, gui->awin, gui->swin, gui->shwin, gui->mwin, gui->iwin,
  437.         gui->dwin, gui->uwin, gui->WI_ConnectTo, gui->WI_Navigator,
  438.         gui->WI_Hotlist, gui->WI_ChannelList, NULL);
  439.  
  440.     set(gui->win, MUIA_Window_Open, TRUE);
  441.     get(gui->win, MUIA_Window_Open, &winopen);
  442.     if (!winopen) {
  443.         printf(MSG_ERR_NOWINDOW);
  444.         return(0);
  445.     }
  446.  
  447.     if (!prf->user) DoMethod(gui->iconpanel, PANEL_OPENPRF);
  448.     /* If no account is configured, open configuration window */
  449.  
  450.     if (prf->user && prf->autocon) {
  451.         nap_login();
  452.         return(1);
  453.     }
  454.  
  455.     set(gui->stat, MUIA_Text_Contents, MSG_STATUS2_NOTCONNECTED);
  456.     return(1);
  457. }
  458.  
  459.  
  460. MUIF gui_handle(REG(a0) struct Hook *h, REG(a2) Object *app, REG(a1) u_long *id)
  461. {
  462.     u_long tmp;
  463.     char *buf;
  464.  
  465.     switch(*id) {
  466.         case CONNECT:
  467.             if (gui_onlinestate < CONNECTING) nap_login();
  468.             break;
  469.         case DISCONNECT:
  470.             nap_logout();
  471.             set(gui->stat, MUIA_Text_Contents, MSG_STATUS2_NOTCONNECTED);
  472.             break;
  473.         case RECONNECT:
  474.             if (gui_onlinestate > OFFLINE) nap_logout();
  475.             nap_login();
  476.             break;
  477.         case CONNECTSERVER:
  478.             if (gui_onlinestate > OFFLINE) nap_logout();
  479.             get(gui->ST_ConnectServer, MUIA_String_Contents, &buf);
  480.             get(gui->ST_ConnectUser,   MUIA_String_Contents, &gui->ConnectUser);
  481.             get(gui->ST_ConnectPw,     MUIA_String_Contents, &gui->ConnectPw);
  482.             get(gui->TG_ConnectReg,    MUIA_Selected,        &tmp);
  483.             set(gui->WI_ConnectTo, MUIA_Window_Open, FALSE);
  484.             if (tmp) prf->regflag = 2;
  485.             else prf->regflag = 0;
  486.             nap_login_fromlist(buf);
  487.             break;
  488.         case EXECUTEAREXX:
  489.             {
  490.             BPTR lock;
  491.             struct FileRequester *freq;
  492.             u_long win;
  493.             char DefaultDir[256] = "";
  494.  
  495.             lock = Lock("PROGDIR:Rexx/", ACCESS_READ);
  496.             if (lock) {
  497.                 NameFromLock(lock, DefaultDir, 255);
  498.                 UnLock(lock);
  499.             }
  500.  
  501.             get(gui->win, MUIA_Window_Window, &win);
  502.             freq = AllocAslRequestTags(ASL_FileRequest, TAG_DONE);
  503.             if (!freq) break;
  504.             tmp = AslRequestTags(freq,
  505.                 ASLFR_Window, win,
  506.                 ASLFR_TitleText, MSG_SELECTRX_TITLE,
  507.                 ASLFR_InitialDrawer, DefaultDir,
  508.                 ASLFR_DoSaveMode, FALSE,
  509.                 TAG_DONE);
  510.             if (tmp) {
  511.                 static char buf[512];
  512.                 strcpy(buf, freq->fr_Drawer);
  513.                 AddPart(buf, freq->fr_File,511);
  514.                 rexx_execute(buf, NULL);
  515.             }
  516.             FreeAslRequest(freq);
  517.             break;
  518.             }
  519.         case UPDATEPANEL:
  520.             GetAttr(MUIA_Menuitem_Checked, gui->iconpanelmenu, &tmp);
  521.             if (tmp==TRUE) {
  522.                 if (!gui->rect && DoMethod(gui->maingrp, MUIM_Group_InitChange)) {
  523.                     DoMethod(gui->maingrp, OM_ADDMEMBER,
  524.                         gui->rect = HGroup,
  525.                             Child, RectangleObject,
  526.                                 MUIA_FixWidth, 4,
  527.                                 MUIA_Rectangle_VBar, TRUE,
  528.                             End,
  529.                             Child, gui->iconpanel,
  530.                         End);
  531.                     DoMethod(gui->maingrp, MUIM_Group_ExitChange);
  532.                 }
  533.             }
  534.             else {
  535.                 if (gui->rect && DoMethod(gui->maingrp, MUIM_Group_InitChange)) {
  536.                     DoMethod(gui->maingrp, OM_REMMEMBER, gui->rect);
  537.                     DoMethod(gui->maingrp, MUIM_Group_ExitChange);
  538. /*                    DisposeObject(gui->rect);*/
  539.                     gui->rect = NULL;
  540.                 }
  541.             }
  542.             break;
  543.         case DEICONIFIED:
  544.             /* Work-around for a bug in Lamp.mcc */
  545.             if (gui_onlinestate < CONNECTING) set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_Off);
  546.             else if (gui_onlinestate == ONLINE) set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_Ok);
  547.             else set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_Connecting);
  548.             break;
  549.     }
  550.     return(0);
  551. }
  552.  
  553.  
  554. void gui_state(enum OnlineState s)
  555. {
  556.     u_long tmp;
  557.     static char title[128];
  558.  
  559.     gui_onlinestate = s;
  560.  
  561.     switch (s) {
  562.         case DISCONNECTED:
  563.             prf_event(PRFE_DISCONNECT);
  564.             DoMethod(gui->WI_Hotlist, HOTLIST_SIGNOFF_ALL);
  565.         case OFFLINE:    /* Offline */
  566.             set(gui->inbut, MUIA_Disabled, FALSE);
  567.             set(gui->outbut, MUIA_Disabled, TRUE);
  568.             set(gui->rebut, MUIA_Disabled, TRUE);
  569.  
  570.             sprintf(title, "Amster v%s · %s", AMSTER_VERSION, MSG_MAIN_TITLE_NOTCONNECTED);
  571.             set(gui->win, MUIA_Window_Title, title);
  572.  
  573.             /* Work-around for a bug in Lamp.mcc */
  574.             get(gui->app, MUIA_Application_Iconified, &tmp);
  575.             if (!tmp) set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_Off);
  576.  
  577.             DoMethod(gui->searchpanel, SEARCH_CLEAR, CLEAR_ALL);
  578.             DoMethod(gui->WI_Hotlist, HOTLIST_CLEAR, CLEAR_ALL);
  579.             gui_appicon(2);
  580.             break;
  581.         case CONNECTING:    /* Connecting */
  582.             set(gui->inbut, MUIA_Disabled, TRUE);
  583.             set(gui->outbut, MUIA_Disabled, FALSE);
  584.  
  585.             sprintf(title, "Amster v%s · %s", AMSTER_VERSION, MSG_MAIN_TITLE_NOTCONNECTED);
  586.             set(gui->win, MUIA_Window_Title, title);
  587.  
  588.             /* Work-around for a bug in Lamp.mcc */
  589.             get(gui->app, MUIA_Application_Iconified, &tmp);
  590.             if (!tmp) set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_Connecting);
  591.  
  592.             set(gui->stat, MUIA_Text_Contents, MSG_STATUS2_CONNECTING);
  593.             break;
  594.         case LOGGING_IN:    /* Logging in */
  595.             prf_event(PRFE_CONNECT);
  596.             set(gui->inbut, MUIA_Disabled, TRUE);
  597.             set(gui->outbut, MUIA_Disabled, FALSE);
  598.             set(gui->rebut, MUIA_Disabled, FALSE);
  599.  
  600.             sprintf(title, "Amster v%s · %s", AMSTER_VERSION, nap_server);
  601.             set(gui->win, MUIA_Window_Title, title);
  602.  
  603.             /* Work-around for a bug in Lamp.mcc */
  604.             get(gui->app, MUIA_Application_Iconified, &tmp);
  605.             if (!tmp) set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_SendingData);
  606.  
  607.             break;
  608.         case ONLINE:    /* Online */
  609.             set(gui->inbut, MUIA_Disabled, TRUE);
  610.             set(gui->outbut, MUIA_Disabled, FALSE);
  611.             set(gui->rebut, MUIA_Disabled, FALSE);
  612.  
  613.             sprintf(title, "Amster v%s · %s", AMSTER_VERSION, nap_server);
  614.             set(gui->win, MUIA_Window_Title, title);
  615.  
  616.             /* Work-around for a bug in Lamp.mcc */
  617.             get(gui->app, MUIA_Application_Iconified, &tmp);
  618.             if (!tmp) set(gui->lamp, MUIA_Lamp_Color, MUIV_Lamp_Color_Ok);
  619.  
  620.             gui_appicon(1);
  621.             break;
  622.     }
  623. }
  624.  
  625.  
  626. void gui_srvstat(int a, int b, int c)
  627. {
  628.     gui_stat((char*)MSG_STATUS2_SONGSONLINE, b, a, c);
  629. }
  630.  
  631.  
  632. void gui_found(song s, int type)
  633. {
  634.     if (type == 0) DoMethod(gui->searchpanel, SEARCH_FOUND, s);
  635.     else if (type == 1) DoMethod(gui->WI_Hotlist, HOTLIST_FOUND, s);
  636. }
  637.  
  638.  
  639. void localize_array(char *array[])
  640. {
  641.     char **x;
  642.  
  643.     for (x=array;*x;x++)
  644.         *x = (char *)((struct FC_String *)(*x))->msg;
  645. }
  646.  
  647.  
  648. void gui_stat(char *msg, ...)
  649. {
  650.     static char buf[256];
  651.     va_list ap;
  652.  
  653.     va_start(ap,msg);
  654.     vsprintf(buf,msg,ap);
  655.     va_end(ap);
  656.     set(gui->stat, MUIA_Text_Contents, buf);
  657. }
  658.  
  659.  
  660. void gui_appicon(int t)
  661. {
  662.     static struct DiskObject *on, *off;
  663.  
  664.     switch(t) {
  665.         case 0:
  666.             on = GetDiskObject("PROGDIR:Icons/Amster_online");
  667.             off = GetDiskObject("PROGDIR:Icons/Amster_offline");
  668.             break;
  669.  
  670.         case -1:
  671.             if (on) FreeDiskObject(on);
  672.             if (off) FreeDiskObject(off);
  673.             break;
  674.  
  675.         case 1:
  676.             if (on) set(gui->app, MUIA_Application_DiskObject, on);
  677.             break;
  678.  
  679.         case 2:
  680.             if (off) set(gui->app, MUIA_Application_DiskObject, off);
  681.             break;
  682.  
  683.     }
  684. }
  685.